/**
 *Arxiu que genera els http_requests per treballar amb Ajax
 *
 * @copyright 2009 - Equip de Desenvolupament de ASI 2
 * @link http://www.iescopernic.com
 * @version 1.0
 * @license GNU/GPL-http://www.gnu.org/copyleft/gpl.html
 * @package CreditSintesis
 * @subpackage scrips
 * @author ASI 2
 */

var request = null;  // variable local per la peticio
var queryString;     // variable per enviar tots els camps del formulari.


/**
 * Aquesta funcio munta i emet una peticio GET o POST, si es POST afegeix la capalera
 * i les dades del formulari de l'ultim parametre, sino van a l'URL
 * utilitza la variable request creada segons el navegador per httpRequest..
 * Parametres :
 *  [0] - reqType    : es el tipus de peticio (GET o POST)
 *  [1] - url        : es l'adreca complerta de la peticio
 *  [2] - bool       : es si es sincrona false, o asincrona true
 *  [3] - respHandle : es la funcio destinataria de la resposta.
 *  [4] - (opcional) : Aquest parametre pot rebre per exemple  una llista de peticio
 *                     o qualsevol altre cosa que es vulgui enviar amb POST
 *  Emet un missatge d'error si no es pot dur a terme la peticio
 */
function initReq(reqType,url,bool,respHandle){
    try{
        request.onreadystatechange=respHandle;
        request.open(reqType,url,bool);
        if(reqType.toLowerCase() == "post") {
            request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
            request.send(arguments[4]);
        } else {
            request.send(null);
        }

    } catch (errv) {
        document.getElementById('error').innerHTML =
        "No es pot contactar amb el servidor en aquest moment.\n "+
        "Si us plau torneu a provar-ho en uns segons.\n"+
        "Detall de l'error : "+errv.message;
    }
}

/**
 * Aquesta funcio crea una peticio adaptada al tipus de navagador que s'utilitza
 * Si la peticio es POST envia a executar els par`ametres adequats.
 * Parametres :
 *  [0] - reqType    : es el tipus de peticio (GET o POST)
 *  [1] - url        : es l'adreca complerta de la peticio
 *  [2] - asynch     : es si es sincrona false, o asincrona true
 *  [3] - respHandle : es la funcio destinataria de la resposta.
 *  [4] - (opcional) : Aquest parametre pot rebre per exemple  una llista de peticio
 *                     o qualsevol altre cosa que es vulgui enviar amb POST
 *  Emet un missatge d'error si no es pot crear la peticio
 */
function httpRequest(reqType,url,asynch,respHandle){
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest();
    } else if (window.ActiveXObject){
        request=new ActiveXObject("Msxml2.XMLHTTP");
        if (! request){
            request=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    if(request)  {
        if(reqType.toLowerCase() != "post") {
            initReq(reqType,url,asynch,respHandle);
        }  else {
            var args = arguments[4];
            if(args != null && args.length > 0){
                initReq(reqType,url,asynch,respHandle,args);
            }
        }
    }  else {
          document.getElementById('error').innerHTML = "El vostre navegador, no permet l'ús de totes "+
    "les característiques d'aquesta aplicació!";
    }
}

/**
 * Donat un formulari, extreu a la variable queryString tots els camps del formulari
 * amb els seus valors, formatat per fer una peticio.
 * @param x
 */
function setQueryString(x){
queryString="";
    var frm = document.forms[x];
    var numberElements =  frm.elements.length;
    for(var i = 0; i < numberElements; i++)  {
        if(i < numberElements-1)  {
            queryString += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&";
                } else {
        queryString += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value);
            }
        }
        }

